package com.example.wisdomclassroomapi.domain.vo;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.Getter;
import lombok.RequiredArgsConstructor;

/**
 * 微信小程序登录应答Vo
 */
@Data
public class WxAppCode2SessionResponseVo {
    /**
     * 用户唯一标识
     */
    @JsonProperty("openid")
    private String openId;

    /**
     * 会话密钥
     */
    @JsonProperty("session_key")
    private String sessionKey;

    /**
     * 用户在开放平台的唯一标识符，若当前小程序已绑定到微信开放平台帐号下会返回<br/>
     * 详见 <a href="https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/union-id.html">UnionID</a> 机制说明。
     */
    @JsonProperty("unionid")
    private String unionId;

    /**
     * 错误码<br/>
     *
     * @see Code2SessionErrorCodeEnum
     */
    @JsonProperty("errcode")
    private Integer errorCode;

    /**
     * 错误信息
     */
    @JsonProperty("errmsg")
    private String errorMessage;

    /**
     * token
     */
    private String token;

    /**
     * 用户主键
     */
    private String userId;

    /**
     * 用户名
     */
    private String username;

    /**
     * 用户昵称
     */
    private String nickname;

    /**
     * 判断登录是否成功
     *
     * @return boolean
     */
    public boolean isSuccess() {
        return errorCode == null || errorCode == Code2SessionErrorCodeEnum.SUCCESS.code;
    }

    /**
     * Code2Session错误码枚举
     */
    @RequiredArgsConstructor
    @Getter
    private enum Code2SessionErrorCodeEnum {
        SYSTEM_BUSY(-1, "系统繁忙，此时请开发者稍候再试"),
        SUCCESS(0, "请求成功"),
        INVALID_CODE(40029, "code 无效"),
        FREQUENCY_OVERRUN(45011, "频率限制，每个用户每分钟100次"),
        HIGH_RISK_USER(40226, "高风险等级用户，小程序登录拦截 。");

        private final int code;
        private final String message;
    }
}
